﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Xml;
using System.IO;
using System.Windows.Forms;

namespace FileOperationWinform
{
    public class FileXmlOperation
    {
        public int addnode()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Application.StartupPath + "\\Config\\" + "bookstore.xml");
            XmlNode root = xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
            XmlElement xe1 = xmlDoc.CreateElement("book");//创建一个<book>节点
            xe1.SetAttribute("genre", "李赞红");//设置该节点genre属性
            xe1.SetAttribute("ISBN", "2-3631-4");//设置该节点ISBN属性

            XmlElement xesub1 = xmlDoc.CreateElement("title");
            xesub1.InnerText = "CS从入门到精通";//设置文本节点
            xe1.AppendChild(xesub1);//添加到<book>节点中
            XmlElement xesub2 = xmlDoc.CreateElement("author");
            xesub2.InnerText = "候捷";
            xe1.AppendChild(xesub2);
            XmlElement xesub3 = xmlDoc.CreateElement("price");
            xesub3.InnerText = "58.3";
            xe1.AppendChild(xesub3);

            root.AppendChild(xe1);//添加到<bookstore>节点中
            xmlDoc.Save(Application.StartupPath + "\\Config\\" + "bookstore.xml");

            return 1;
        }
        public int updatenode()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Application.StartupPath + "\\Config\\" + "bookstore.xml");
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
            foreach (XmlNode xn in nodeList)//遍历所有子节点
            {
                XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                if (xe.GetAttribute("genre") == "李赞红")//如果genre属性值为“李赞红”
                {
                    xe.SetAttribute("genre", "update李赞红");//则修改该属性为“update李赞红”

                    XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点   
                    foreach (XmlNode xn1 in nls)//遍历
                    {
                        XmlElement xe2 = (XmlElement)xn1;//转换类型
                        if (xe2.Name == "author")//如果找到
                        {
                            xe2.InnerText = "亚胜";//则修改
                            break;//找到退出来就可以了
                        }
                    }
                    break;
                }
            }

            xmlDoc.Save(Application.StartupPath + "\\Config\\" + "bookstore.xml");
            return 1;

        }
        public int delnode()
        {
            XmlDocument xmlDoc = new XmlDocument();

            XmlNodeList xnl = xmlDoc.SelectSingleNode("bookstore").ChildNodes;

            foreach (XmlNode xn in xnl)
            {
                XmlElement xe = (XmlElement)xn;

                if (xe.GetAttribute("genre") == "fantasy")
                {
                    xe.RemoveAttribute("genre");//删除genre属性
                }
                else if (xe.GetAttribute("genre") == "update李赞红")
                {
                    xe.RemoveAll();//删除该节点的全部内容
                }
            }
            xmlDoc.Save("bookstore.xml");

            return 1;
        }
        public int showallnode()
        {
            XmlDocument xmlDoc = new XmlDocument();

            XmlNode xn = xmlDoc.SelectSingleNode("bookstore");

            XmlNodeList xnl = xn.ChildNodes;

            foreach (XmlNode xnf in xnl)
            {
                XmlElement xe = (XmlElement)xnf;
                Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
                Console.WriteLine(xe.GetAttribute("ISBN"));

                XmlNodeList xnf1 = xe.ChildNodes;
                foreach (XmlNode xn2 in xnf1)
                {
                    Console.WriteLine(xn2.InnerText);//显示子节点点文本
                }
            }
            return 1;
        }

        public void createxml()
        {
            DirectoryInfo ds = new DirectoryInfo(Application.StartupPath + "\\Config");
            ds.Create();

            if (!File.Exists(Application.StartupPath + "\\Config\\" + "bookstore.xml"))
            {
                XmlTextWriter wr = new XmlTextWriter(Application.StartupPath + "\\Config\\" + "bookstore.xml", Encoding.Default);

                try
                {
                    wr.WriteStartDocument();
                    wr.Formatting = Formatting.Indented;
                    wr.WriteStartElement("bookstore");
                    wr.WriteEndElement();
                    wr.WriteEndDocument();
                }
                catch
                {

                }
                wr.Flush();
                wr.Close();
            }
        }
    }
}
